#pragma once

#include  "iostream"
#include  "vector"
#include  "stack"
#include  "unordered_map"
#include   "queue"

using namespace std;
/*
 *给你一个字符串 s，最多 可以从中删除一个字符。
请你判断 s 是否能成为回文字符串：如果能，返回 true ；否则，返回 false 。
示例 1：
输入：s = "aba"
输出：true
示例 2：

输入：s = "abca"
输出：true
解释：你可以删除字符 'c' 。
示例 3：

输入：s = "abc"
输出：false
 *
 *
 * */
//我的垃圾暴力check
bool check(string &s, int index) {
    int low = 0;
    int high = s.size() - 1;
    if (low == index)
        low++;
    if (high == index)
        high--;

    while (low <= high) {

        if (s[low++] != s[high--])
            return false;

        if (low == index)
            low++;
        if (high == index)
            high--;

    }


    return true;
}

//看似是一个简单题 ...我实际还看了一下答案
bool check_(string &s, int low, int high) {
    while (low <= high) {
        if (s[low++] != s[high--])
            return false;
    }
    return true;
}

bool validPalindrome(string s) {


    int low = 0;
    int high = s.size() - 1;

    while (low < high) {
        //如果发现俩字符串不相等
        //此时子串范围为(i+1, j)或(i, j-1)的俩子串只要有任意一个是回文串，则结果就是回文串，否则就不是
        if (s[low] != s[high]) {
            return check_(s, low + 1, high) || check_(s, low, high - 1);
        }

        low++;
        high--;
    }


    return true;

}